A Single Instruction, Multiple Data (SIMD) architecture improves efficiency of multi-dimensional computations. Implemented in computer systems, the SIMD architecture enables one instruction to operate on data simultaneously, rather than on a single data. In particular, SIMD architectures take advantage of packing many data elements within one register or memory location. With parallel hardware execution, multiple operations can be performed with one instruction, resulting in significant performance improvement.
Although many applications currently in use can take advantage of such operations, known as vertical operations, there are a number of important applications which require the rearrangement of the data elements before vertical operations can be implemented so as to provide realization of the application. Examples of some important applications include the dot product and matrix multiplication operations, which are commonly used in 3-D graphics and signal processing applications.
One problem with rearranging the order of data elements within a register or memory word is the mechanism used to indicate how the data should be rearranged. Typically, a mask or control word is used. The control word must include enough bits to indicate which of the source data fields must be moved into each destination data field. For example, if a source operand has eight data fields, requiring three bits to designate any given data field, and the destination register has four data fields, (3×4) or 12 bits are required for the control word. However, on a processor implementation where there are less than 12 bits available for the control register, a full shuffle cannot be supported. Some approaches addressing such issues were presented, for example, in U.S. Pat. No. 6,041,404 and in U.S. Pat. No. 7,155,601.
The problem described above is made worse though, when even more data fields are permitted in the sources and destinations. Moreover the complexity of circuitry required to shuffle data and to control said shuffling can increase proportional to the square of the number of permitted data fields causing undesirable delays, costing precious die area, and consuming ever more power. Therefore, there is a need for a way to reorganize the order of data elements where less than the full number of bits is available for a control register in such a way as to scale to handle operands where even more data fields are permitted.